package com.camnter.newlife.ui.activity; import android.content.ContentResolver; import android.content.ContentValues; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.TextView; import com.camnter.easyrecyclerview.adapter.EasyRecyclerViewAdapter; import com.camnter.easyrecyclerview.holder.EasyRecyclerViewHolder; import com.camnter.easyrecyclerview.widget.EasyRecyclerView; import com.camnter.newlife.R; import com.camnter.newlife.bean.ProviderData; import com.camnter.newlife.bean.SQLiteData; import com.camnter.newlife.component.contentprovider.MessageContentProvider; import com.camnter.newlife.core.activity.BaseAppCompatActivity; import java.util.ArrayList; import java.util.List; import java.util.UUID; /** * Description:CustomContentProviderActivity * Created by:CaMnter * Time:2015-11-13 14:27 */ public class CustomContentProviderActivity extends BaseAppCompatActivity { private EasyRecyclerView providerRV; private ProviderRecyclerViewAdapter adapter; /** * Fill in layout id * * @return layout id */ @Override protected int getLayoutId() { return R.layout.activity_custom_content_provider; } /** * Initialize the view in the layout * * @param savedInstanceState savedInstanceState */ @Override protected void initViews(Bundle savedInstanceState) { this.providerRV = this.findView(R.id.provider_rv); } /** * Initialize the View of the listener */ @Override protected void initListeners() { } /** * Initialize the Activity data */ @Override protected void initData() { this.getContentResolver() .registerContentObserver(MessageContentProvider.MESSAGE_URI, true, new MessageProviderObserver(new Handler())); this.adapter = new ProviderRecyclerViewAdapter(this.getContentResolver(), MessageContentProvider.MESSAGE_URI); this.providerRV.setAdapter(this.adapter); ArrayList<SQLiteData> allData = new ArrayList<>(); allData.add(new SQLiteData()); this.adapter.setList(allData); this.adapter.notifyDataSetChanged(); } private class MessageProviderObserver extends ContentObserver { /** * Creates a content observer. * * @param handler The handler to run {@link #onChange} on, or null if none. */ public MessageProviderObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); } } /** * Provider RecyclerView Adapter */ private class ProviderRecyclerViewAdapter extends EasyRecyclerViewAdapter implements View.OnClickListener { private static final int ITEM_PROVIDER_OPERATION = 0; private static final int ITEM_PROVIDER_DATA = 1; private ContentResolver resolver; private Uri uri; public ProviderRecyclerViewAdapter(ContentResolver resolver, Uri uri) { this.resolver = resolver; this.uri = uri; } @Override public int[] getItemLayouts() { return new int[] { R.layout.item_content_provider_operation, R.layout.item_content_provider_data }; } @Override public void onBindRecycleViewHolder(EasyRecyclerViewHolder easyRecyclerViewHolder, int position) { int itemType = this.getRecycleViewItemType(position); switch (itemType) { case ITEM_PROVIDER_OPERATION: easyRecyclerViewHolder.findViewById(R.id.provider_add_bt) .setOnClickListener(this); easyRecyclerViewHolder.findViewById(R.id.provider_del_bt) .setOnClickListener(this); easyRecyclerViewHolder.findViewById(R.id.provider_mod_bt) .setOnClickListener(this); easyRecyclerViewHolder.findViewById(R.id.provider_query_bt) .setOnClickListener(this); break; case ITEM_PROVIDER_DATA: ProviderData data = (ProviderData) this.getList().get(position); TextView idTV = easyRecyclerViewHolder.findViewById(R.id.provider_id_tv); TextView contentTV = easyRecyclerViewHolder.findViewById( R.id.provider_content_tv); idTV.setText(data.id + ""); contentTV.setText(data.content + ""); break; } } @Override public int getRecycleViewItemType(int i) { if (i == 0) { return ITEM_PROVIDER_OPERATION; } else { return ITEM_PROVIDER_DATA; } } /** * Called when a view has been clicked. * * @param v The view that was clicked. */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.provider_add_bt: { ContentValues values = new ContentValues(); values.put("content", "Save you from anything"); this.resolver.insert(this.uri, values); this.refresh(); break; } case R.id.provider_del_bt: { this.resolver.delete(this.uri, null, null); this.refresh(); break; } case R.id.provider_mod_bt: { List<ProviderData> allData = this.queryAll(); int firstId = allData.get(0).id; ContentValues values = new ContentValues(); values.put("content", UUID.randomUUID().toString()); String path = this.uri.toString(); this.resolver.update(Uri.parse( path.substring(0, path.lastIndexOf("/")) + "/message/" + firstId), values, null, null); this.refresh(); break; } case R.id.provider_query_bt: { this.refresh(); break; } } } private void refresh() { List<ProviderData> l = this.queryAll(); l.add(0, new ProviderData()); this.setList(l); this.notifyDataSetChanged(); } private List<ProviderData> queryAll() { List<ProviderData> allData = new ArrayList<>(); Cursor result = this.resolver.query(this.uri, null, null, null, null); for (result.moveToFirst(); !result.isAfterLast(); result.moveToNext()) { ProviderData data = new ProviderData(); data.id = result.getInt(result.getColumnIndex("_id")); data.content = result.getString(result.getColumnIndex("content")); allData.add(data); } result.close(); return allData; } } }