UI Android

/*
 * Copyright (C) 2008 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.savedInstanceState
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.eoeAndroid.contentProvider;
import android.app.ListActivity;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import com.eoeAndroid.contentProvider.Diary.DiaryColumns;
public class ActivityMain extends ListActivity {
  // Â²åÈëÃ’»ÃŒÃµ¼¼
  public static final int MENU_ITEM_INSERT = Menu.FIRST;
  // Â±à¼­ÄÚÈ
  public static final int MENU_ITEM_EDIT = Menu.FIRST + 1;
  public static final int MENU_ITEM_DELETE = Menu.FIRST + 2;
  private static final String[] PROJECTION = new String[] { DiaryColumns._ID,
      DiaryColumns.TITLE, DiaryColumns.CREATED };
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.diary_list);
    Intent intent = getIntent();
    if (intent.getData() == null) {
      intent.setData(DiaryColumns.CONTENT_URI);
    }
    Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null,
        null, DiaryColumns.DEFAULT_SORT_ORDER);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
        R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE,
            DiaryColumns.CREATED }, new int[] { R.id.text1,
            R.id.created });
    setListAdapter(adapter);
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert);
    return true;
  }
  @Override
  /*
   * Ã”Úÿһ´ÎmenuÉú³ÉµÄ汼òÇ°¶¼»áµ÷ÓÃÕâ¸ö·½·¨£Â¬Ã”ÚÕâ¸ö·½·¨Àï±ß¿ÉÒÔ¶¯Ì¬µÄÞ¸ÄÉú³ÉµÄmenu¡£
   */
  public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    final boolean haveItems = getListAdapter().getCount() > 0;
    if (haveItems) {
      // Ãˆç¹ûÑ¡ÖÃ’»Â¸öItemµĻ°
      if (getListView().getSelectedItemId() > 0) {
        menu.removeGroup(1);
        Uri uri = ContentUris.withAppendedId(getIntent().getData(),
            getSelectedItemId());
        Intent intent = new Intent(null, uri);
        menu.add(1, MENU_ITEM_EDIT, 1, "±à¼­ÄÚÈ").setIntent(intent);
        menu.add(1, MENU_ITEM_DELETE, 1, "ɾ³ýµ±Ç°ÈÕ¼Ç");
      }
    }else{
      menu.removeGroup(1);
    }
    return true;
  }
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Â²åÈëÃ’»ÃŒÃµÃŠÃ½Â¾
    case MENU_ITEM_INSERT:
      Intent intent0 = new Intent(this, ActivityDiaryEditor.class);
      intent0.setAction(ActivityDiaryEditor.INSERT_DIARY_ACTION);
      intent0.setData(getIntent().getData());
      startActivity(intent0);
      return true;
      // Â±à¼­µ±Ç°Êý¾ÄÚÈ
    case MENU_ITEM_EDIT:
      Intent intent = new Intent(this, ActivityDiaryEditor.class);
      intent.setData(item.getIntent().getData());
      intent.setAction(ActivityDiaryEditor.EDIT_DIARY_ACTION);
      startActivity(intent);
      return true;
      // Ã‰Â¾Â³Ã½ÂµÂ±Ç°Êý¾
    case MENU_ITEM_DELETE:
      Uri uri = ContentUris.withAppendedId(getIntent().getData(),
          getListView().getSelectedItemId());
      getContentResolver().delete(uri, null, null);
      renderListView();
    }
    return super.onOptionsItemSelected(item);
  }
  @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
    Uri uri = ContentUris.withAppendedId(getIntent().getData(), id);
    startActivity(new Intent(ActivityDiaryEditor.EDIT_DIARY_ACTION, uri));
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode,
      Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    //renderListView();
  }
  private void renderListView() {
    Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null,
        null, DiaryColumns.DEFAULT_SORT_ORDER);
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
        R.layout.diary_row, cursor, new String[] { DiaryColumns.TITLE,
            DiaryColumns.CREATED }, new int[] { R.id.text1,
            R.id.created });
    setListAdapter(adapter);
  }
}
package com.eoeAndroid.contentProvider;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.eoeAndroid.contentProvider.Diary.DiaryColumns;
public class ActivityDiaryEditor extends Activity {
  private static final String TAG = "Diary";
  public static final String EDIT_DIARY_ACTION = "com.ex09_2_contentProvider.ActivityDiaryEditor.EDIT_DIARY";
  public static final String INSERT_DIARY_ACTION = "com.ex09_2_contentProvider.ActivityDiaryEditor.action.INSERT_DIARY";
  /**
   * Â²éѯcursor汼ò£Â¬Â¸ËȤµÄÄÇ©ÌõÀý¡£
   */
  private static final String[] PROJECTION = new String[] { DiaryColumns._ID, // 0
      DiaryColumns.TITLE, DiaryColumns.BODY, // 1
  };
  private static final int STATE_EDIT = 0;
  private static final int STATE_INSERT = 1;
  private int mState;
  private Uri mUri;
  private Cursor mCursor;
  private EditText mTitleText;
  private EditText mBodyText;
  private Button confirmButton;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(android.R.style.Theme_Black);
    final Intent intent = getIntent();
    final String action = intent.getAction();
    setContentView(R.layout.diary_edit);
    
    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);
    confirmButton = (Button) findViewById(R.id.confirm);
    if (EDIT_DIARY_ACTION.equals(action)) {// Â±à¼­ÈÕ¼Ç
      mState = STATE_EDIT;
      mUri = intent.getData();
      mCursor = managedQuery(mUri, PROJECTION, null, null, null);
      mCursor.moveToFirst();
      String title = mCursor.getString(1);
      mTitleText.setTextKeepState(title);
      String body = mCursor.getString(2);
      mBodyText.setTextKeepState(body);
      setResult(RESULT_OK, (new Intent()).setAction(mUri.toString()));
      setTitle("±à¼­ÈÕ¼Ç");
    } else if (INSERT_DIARY_ACTION.equals(action)) {// ½¨ÈÕ¼Ç
      mState = STATE_INSERT;
      setTitle("½¨ÈÕ¼Ç");
    } else {
      Log.e(TAG, "no such action error");
      finish();
      return;
    }
    confirmButton.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        if (mState == STATE_INSERT) {
          insertDiary();
        } else {
          updateDiary();
        }
        Intent mIntent = new Intent();
        setResult(RESULT_OK, mIntent);
        finish();
      }
    });
  }
  private void insertDiary() {
    String title = mTitleText.getText().toString();
    String body = mBodyText.getText().toString();
    ContentValues values = new ContentValues();
    values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider
        .getFormateCreatedDate());
    values.put(Diary.DiaryColumns.TITLE, title);
    values.put(Diary.DiaryColumns.BODY, body);
    getContentResolver().insert(Diary.DiaryColumns.CONTENT_URI, values);
  }
  private void updateDiary() {
    String title = mTitleText.getText().toString();
    String body = mBodyText.getText().toString();
    ContentValues values = new ContentValues();
    values.put(Diary.DiaryColumns.CREATED, DiaryContentProvider
        .getFormateCreatedDate());
    values.put(Diary.DiaryColumns.TITLE, title);
    values.put(Diary.DiaryColumns.BODY, body);
    getContentResolver().update(mUri, values,
        null, null);
  }
}
package com.eoeAndroid.contentProvider;
import android.net.Uri;
import android.provider.BaseColumns;
public final class Diary {
  //ÕâÀïµĠAUTHORITY Ã’ªÇóÊÇΨÒ»£Â¬Â¶øÇÒºManifestµ±Öprovider±êÇ©µÄAUTHORITYÄÚÈÃ’»ÖÂ
    public static final String AUTHORITY = "com.ex09_2_contentprovider.diarycontentprovider";
    private Diary() {}
    
    /**
     * Notes table
     */
    public static final class DiaryColumns implements BaseColumns {
        // This class cannot be instantiated
        private DiaryColumns() {}
        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/diaries");
        public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.diary";
        public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.diary";
        public static final String DEFAULT_SORT_ORDER = "created DESC";
        public static final String TITLE = "title";
        public static final String BODY = "body";
        public static final String CREATED = "created";
     
    }
}
package com.eoeAndroid.contentProvider;
import java.util.Calendar;
import java.util.HashMap;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import com.eoeAndroid.contentProvider.Diary.DiaryColumns;
public class DiaryContentProvider extends ContentProvider {
  private static final String DATABASE_NAME = "database";
  private static final int DATABASE_VERSION = 3;
  private static final String DIARY_TABLE_NAME = "diary";
  private static final int DIARIES = 1;
  private static final int DIARY_ID = 2;
  private static final UriMatcher sUriMatcher;
  private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
      super(context, DATABASE_NAME, null, DATABASE_VERSION);
      Log.i("jinyan", "DATABASE_VERSION=" + DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
      Log.i("jinyan", "onCreate(SQLiteDatabase db)");
      String sql = "CREATE TABLE " + DIARY_TABLE_NAME + " ("
          + DiaryColumns._ID + " INTEGER PRIMARY KEY,"
          + DiaryColumns.TITLE + " TEXT," + DiaryColumns.BODY
          + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
      //
      sql ="CREATE TABLE " + DIARY_TABLE_NAME + " ("
      + DiaryColumns._ID + " INTEGER PRIMARY KEY,"
      + DiaryColumns.TITLE + " varchar(255)," + DiaryColumns.BODY
      + " TEXT," + DiaryColumns.CREATED + " TEXT" + ");";
      //
      Log.i("jinyan", "sql="+sql);
      db.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.i("jinyan",
          " onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)="
              + newVersion);
      db.execSQL("DROP TABLE IF EXISTS diary");
      onCreate(db);
    }
  }
  private DatabaseHelper mOpenHelper;
  static {
    sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    sUriMatcher.addURI(Diary.AUTHORITY, "diaries", DIARIES);
    sUriMatcher.addURI(Diary.AUTHORITY, "diaries/#", DIARY_ID);
  }
  @Override
  public boolean onCreate() {
    mOpenHelper = new DatabaseHelper(getContext());
    return true;
  }
  @Override
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    switch (sUriMatcher.match(uri)) {
    case DIARIES:
      qb.setTables(DIARY_TABLE_NAME);
      break;
    case DIARY_ID:
      qb.setTables(DIARY_TABLE_NAME);
      qb.appendWhere(DiaryColumns._ID + "="
          + uri.getPathSegments().get(1));
      break;
    default:
      throw new IllegalArgumentException("Unknown URI " + uri);
    }
    String orderBy;
    if (TextUtils.isEmpty(sortOrder)) {
      orderBy = Diary.DiaryColumns.DEFAULT_SORT_ORDER;
    } else {
      orderBy = sortOrder;
    }
    SQLiteDatabase db = mOpenHelper.getReadableDatabase();
    Cursor c = qb.query(db, projection, selection, selectionArgs, null,
        null, orderBy);
    return c;
  }
  @Override
  public String getType(Uri uri) {
    switch (sUriMatcher.match(uri)) {
    case DIARIES:
      return DiaryColumns.CONTENT_TYPE;
    case DIARY_ID:
      return DiaryColumns.CONTENT_ITEM_TYPE;
    default:
      throw new IllegalArgumentException("Unknown URI " + uri);
    }
  }
  @Override
  public Uri insert(Uri uri, ContentValues initialValues) {
    if (sUriMatcher.match(uri) != DIARIES) {
      throw new IllegalArgumentException("Unknown URI " + uri);
    }
    ContentValues values;
    if (initialValues != null) {
      values = new ContentValues(initialValues);
    } else {
      values = new ContentValues();
    }
    if (values.containsKey(Diary.DiaryColumns.CREATED) == false) {
      values.put(Diary.DiaryColumns.CREATED, getFormateCreatedDate());
    }
    if (values.containsKey(Diary.DiaryColumns.TITLE) == false) {
      Resources r = Resources.getSystem();
      values.put(Diary.DiaryColumns.TITLE, r
          .getString(android.R.string.untitled));
    }
    if (values.containsKey(Diary.DiaryColumns.BODY) == false) {
      values.put(Diary.DiaryColumns.BODY, "");
    }
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    long rowId = db.insert(DIARY_TABLE_NAME, DiaryColumns.BODY, values);
    if (rowId > 0) {
      Uri diaryUri = ContentUris.withAppendedId(
          Diary.DiaryColumns.CONTENT_URI, rowId);
      return diaryUri;
    }
    throw new SQLException("Failed to insert row into " + uri);
  }
  @Override
  public int delete(Uri uri, String where, String[] whereArgs) {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    String rowId = uri.getPathSegments().get(1);
    return db
        .delete(DIARY_TABLE_NAME, DiaryColumns._ID + "=" + rowId, null);
  }
  @Override
  public int update(Uri uri, ContentValues values, String where,
      String[] whereArgs) {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    String rowId = uri.getPathSegments().get(1);
    return db.update(DIARY_TABLE_NAME, values, DiaryColumns._ID + "="
        + rowId, null);
  }
  public static String getFormateCreatedDate() {
    Calendar calendar = Calendar.getInstance();
    String created = calendar.get(Calendar.YEAR) + "Äê"
        + calendar.get(Calendar.MONTH) + "ÔÂ"
        + calendar.get(Calendar.DAY_OF_MONTH) + "ÈÕ"
        + calendar.get(Calendar.HOUR_OF_DAY) + "ʱ"
        + calendar.get(Calendar.MINUTE) + "·Ö";
    return created;
  }
}
//diary_edit.xml

  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
      android:layout_width="fill_parent"
    android:layout_height="wrap_content">
          android:layout_height="wrap_content" android:text="@string/title"
      android:padding="2px" />
          android:layout_width="fill_parent"
      android:layout_height="wrap_content" android:layout_weight="1" />
  
      android:layout_height="wrap_content" android:text="@string/body" />
      android:layout_height="fill_parent" android:layout_weight="1"
    android:scrollbars="vertical" android:gravity="top" />
      android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

//diary_list.xml

  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
      android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
      android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="" />

//diary_row.xml

  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
      android:layout_width="wrap_content" android:layout_height="30px"
    android:maxWidth="200dip" 
    android:textSize="22sp"
    android:layout_marginTop="10dip"
    android:text="??????" />
      android:layout_height="35px" android:layout_alignParentRight="true"
    android:layout_marginLeft="10dip" 
    android:layout_marginTop="10dip"
    android:text="1999?12?3?" />