· 6 years ago · Dec 06, 2019, 12:00 AM
1package com.phehossof.launcher;
2
3import android.content.ContentProvider;
4import android.content.ContentUris;
5import android.content.ContentValues;
6import android.content.Context;
7import android.content.UriMatcher;
8import android.database.Cursor;
9import android.database.sqlite.SQLiteDatabase;
10import android.database.sqlite.SQLiteException;
11import android.database.sqlite.SQLiteOpenHelper;
12import android.database.sqlite.SQLiteQueryBuilder;
13import android.net.Uri;
14import androidx.annotation.NonNull;
15import androidx.annotation.Nullable;
16import java.util.HashMap;
17import java.util.Objects;
18
19public class ProviderContent extends ContentProvider {
20 static final String PROVIDER_NAME ="com.phehossof.launcher.ProviderContent";
21 static final String URL = "content://" + PROVIDER_NAME +"/acl";
22 static final Uri CONTENT_URI = Uri.parse(URL);
23
24 static final String id = "id";
25 static final String name = "name";
26 static final String grade = "grade";
27 static final String department = "department";
28 static final int uriCode = 1;
29 static final UriMatcher uriMatcher;
30 private static HashMap<String, String> values;
31
32 static {
33 uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
34 uriMatcher.addURI(PROVIDER_NAME, "acl", uriCode);
35 uriMatcher.addURI(PROVIDER_NAME, "acl/*", uriCode);
36 }
37
38 @Override
39 public boolean onCreate() {
40 Context context = getContext();
41 DatabaseHelper dbHelper = new DatabaseHelper(context);
42 db = dbHelper.getWritableDatabase();
43
44 return db != null;
45 }
46
47 @Nullable
48 @Override
49 public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
50 SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
51 qb.setTables(TABLE_NAME);
52 qb.setStrict(true);
53 qb.setProjectionMap(null);
54 if (uriMatcher.match(uri) == uriCode) qb.setProjectionMap(values);
55 else throw new IllegalArgumentException("Unknown URI " + uri);
56 if (sortOrder == null || Objects.equals(sortOrder, "")) sortOrder = id;
57 Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);
58 c.setNotificationUri(Objects.requireNonNull(getContext()).getContentResolver(), uri);
59 return c;
60 }
61
62 @Nullable
63 @Override
64 public String getType(@NonNull Uri uri) {
65 if (uriMatcher.match(uri) == uriCode) return "vnd.android.cursor/acl";
66 throw new IllegalArgumentException("Unsupported URI:" + uri);
67 }
68
69 @Nullable
70 @Override
71 public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
72 long rowID = db.insert(TABLE_NAME,"", values);
73 if (rowID > 0) {
74 Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
75 Objects.requireNonNull(getContext()).getContentResolver().notifyChange(_uri, null);
76 return _uri;
77 }
78 throw new SQLiteException("Failed to add record into " + uri);
79 }
80
81 @Override
82 public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
83 int count;
84 if (uriMatcher.match(uri) == uriCode) {
85 count = db.delete(TABLE_NAME, selection, selectionArgs);
86 } else {
87 throw new IllegalArgumentException("Unknown URI " + uri);
88 }
89 Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);
90 return count;
91 }
92
93 @Override
94 public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
95 int count;
96 if (uriMatcher.match(uri) == uriCode) {
97 count = db.update(TABLE_NAME, values, selection, selectionArgs);
98 } else {
99 throw new IllegalArgumentException("Unknown URI " + uri);
100 }
101 Objects.requireNonNull(getContext()).getContentResolver().notifyChange(uri, null);
102 return count;
103 }
104
105 private SQLiteDatabase db;
106 static final String DATABASE_NAME = "Phoenix";
107 static final String TABLE_NAME = "CurrentUser";
108 static final int DATABASE_VERSION = 1;
109 static final String CREATE_DB_TABLE = " CREATE TABLE " + TABLE_NAME
110 + " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
111 + " name TEXT NOT NULL, "
112 + " grade INTEGER NOT NULL, "
113 + " department INTEGER NOT NULL);";
114
115 private static class DatabaseHelper extends SQLiteOpenHelper {
116 DatabaseHelper(Context context) {
117 super(context, DATABASE_NAME, null, DATABASE_VERSION);
118 }
119
120 @Override
121 public void onCreate(SQLiteDatabase db) {
122 db.execSQL(CREATE_DB_TABLE);
123 }
124
125 @Override
126 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
127 db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
128 onCreate(db);
129 }
130 }
131}