Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8aaf1052 authored by Romain Hunault's avatar Romain Hunault 🚴🏻
Browse files

Merge branch 'microg_fix_content_provider' into 'master'

Microg fix content provider

See merge request e/apps/apps!54
parents 92f387ab 0ec8f765
Loading
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@

    <uses-permission android:name="foundation.e.pwaplayer.provider.READ_WRITE" />

    <uses-permission android:name="foundation.e.apps.micro.status.READ_WRITE" />

    <application
        android:allowBackup="true"
        android:alwaysRetainTaskState="true"
@@ -73,13 +75,14 @@
            android:launchMode="singleInstance"
            android:theme="@style/AppTheme1"
            android:windowSoftInputMode="adjustResize" />
        <receiver  android:name=".MicrogUninstallListener"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="foundation.e.apps" />
            </intent-filter>
        </receiver>


        <provider
            android:name=".MicroGProvider"
            android:authorities="foundation.e.apps.micro.status"
            android:exported="true"
          />

    </application>

</manifest>
 No newline at end of file
+29 −1
Original line number Diff line number Diff line
@@ -24,10 +24,12 @@ import android.annotation.SuppressLint
import android.content.*
import android.content.pm.PackageManager
import android.content.res.ColorStateList
import android.database.Cursor
import android.graphics.Color
import android.os.Bundle
import android.os.Handler
import android.preference.PreferenceManager
import android.util.Log
import android.util.TypedValue
import android.view.MenuItem
import android.widget.Toast
@@ -54,6 +56,7 @@ import foundation.e.apps.updates.UpdatesFragment
import foundation.e.apps.updates.UpdatesManager
import foundation.e.apps.utils.Constants
import foundation.e.apps.utils.Constants.CURRENTLY_SELECTED_FRAGMENT_KEY
import foundation.e.apps.utils.PreferenceStorage
import kotlinx.android.synthetic.main.activity_main.*


@@ -88,7 +91,6 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
        disableCategoryIfOpenSource()



        bottom_navigation_view.setOnNavigationItemSelectedListener{
            if (selectFragment(it.itemId,it)) {
                disableCategoryIfOpenSource()
@@ -121,6 +123,19 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
        openSearchFragment()
    }

    override fun onResume() {
        super.onResume()
        if (retrieveStatus() != null) {
            if (retrieveStatus().equals("true")) {
                PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), true)
            } else {
                PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), false)
            }
        } else {
            PreferenceStorage(this).save(getString(R.string.prefs_microg_vrsn_installed), false)
        }
    }

    private fun openSearchFragment() {
        if (intent.getBooleanExtra(Constants.OPEN_SEARCH,false)) {
            currentFragmentId = R.id.menu_search
@@ -150,6 +165,19 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS

    }

    private fun retrieveStatus(): String? {
        var status: String? = null
        val c: Cursor? = contentResolver.query(MicroGProvider.CONTENT_URI, null, "id=?", arrayOf("1"), "installStatus")
        if (c!!.moveToFirst()) {
            do {
                status = c.getString(c.getColumnIndex("installStatus"))
            } while (c.moveToNext())
        }
        c.close()
        return status
    }


    private fun initialiseUpdatesWorker() {
        UpdatesManager(applicationContext).startWorker()

+144 −0
Original line number Diff line number Diff line
package foundation.e.apps;

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.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;

public class MicroGProvider extends ContentProvider {

    public static final String PROVIDER_NAME = "foundation.e.apps.micro.status";
    public static final String URL = "content://" + PROVIDER_NAME + "/cte";
    public static final Uri CONTENT_URI = Uri.parse(URL);

    public static final String id = "id";
    public static final String installStatus = "installStatus";
    public static final int uriCode = 1;
    public static final UriMatcher uriMatcher;
    private static HashMap<String, String> values;

    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode);
        uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode);
    }

    @Override
    public boolean onCreate() {
        Context context = getContext();
        DatabaseHelper dbHelper = new DatabaseHelper(context);
        db = dbHelper.getWritableDatabase();
        if (db != null) {
            return true;
        }
        return false;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables(TABLE_NAME);

        switch (uriMatcher.match(uri)) {
            case uriCode:
                qb.setProjectionMap(values);
                break;
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
        if (sortOrder == null || sortOrder.equals("")) {
            sortOrder = installStatus;
        }
        Cursor c = qb.query(db, projection, selection, selectionArgs, null,
                null, sortOrder);
        c.setNotificationUri(getContext().getContentResolver(), uri);
        return c;
    }


    @Override
    public String getType(Uri uri) {
        switch (uriMatcher.match(uri)) {
            case uriCode:
                return "vnd.android.cursor.dir/cte";

            default:
                throw new IllegalArgumentException("Unsupported URI: " + uri);
        }
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        long rowID = db.insert(TABLE_NAME, "", values);
        if (rowID > 0) {
            Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
            getContext().getContentResolver().notifyChange(_uri, null);
            return _uri;
        }
        throw new SQLException("Failed to add a record into " + uri);
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count = 0;
        switch (uriMatcher.match(uri)) {
            case uriCode:
                count = db.delete(TABLE_NAME, selection, selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        int count = 0;
        switch (uriMatcher.match(uri)) {
            case uriCode:
                count = db.update(TABLE_NAME, values, selection, selectionArgs);
                break;
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }

    private SQLiteDatabase db;
    static final String DATABASE_NAME = "microGDB";
    static final String TABLE_NAME = "microgtable";
    static final int DATABASE_VERSION = 1;
    static final String CREATE_DB_TABLE = " CREATE TABLE " + TABLE_NAME
            + " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
            + " installStatus TEXT NOT NULL);";

    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_DB_TABLE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }
}
+0 −13
Original line number Diff line number Diff line
package foundation.e.apps

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.util.Log
import foundation.e.apps.utils.PreferenceStorage

class MicrogUninstallListener : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        PreferenceStorage(context).save(context.getString(R.string.prefs_microg_vrsn_installed), false)
    }
}
 No newline at end of file
+0 −7
Original line number Diff line number Diff line
@@ -185,19 +185,12 @@ class ApplicationViewHolder(private val activity: Activity, private val view: Vi
                    installButton?.isEnabled = false
                }
                State.NOT_UPDATED -> {
                    if (application?.packageName == Constants.MICROG_PACKAGE) {
                        installButton.setBackgroundResource(R.drawable.app_install_border_simple)
                        installButton.text = "Install"
                        installButton.setTextColor(this.accentColorOS)
                    } else {
                        installButton.setTextColor(Color.parseColor("#FAFAFA"))
                        //installButton!!.setBackgroundResource(R.drawable.app_install_border)
                        if (0 != this.accentColorOS) {
                            installButton!!.setBackgroundColor(this.accentColorOS)
                        } else {
                            installButton!!.setBackgroundResource(R.drawable.app_install_border)
                        }
                    }

                    installButton?.isEnabled = true
                }
Loading