Search in sources :

Example 1 with StartupStage

use of com.odysee.app.model.StartupStage in project odysee-android by OdyseeTeam.

the class MainActivity method startup.

@SuppressLint("StaticFieldLeak")
private void startup() {
    final Context context = this;
    Lbry.startupInit();
    // perform some tasks before launching
    (new AsyncTask<Void, Void, Boolean>() {

        private final List<StartupStage> startupStages = new ArrayList<>(7);

        private void initStartupStages() {
            startupStages.add(new StartupStage(STARTUP_STAGE_INSTALL_ID_LOADED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_KNOWN_TAGS_LOADED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_EXCHANGE_RATE_LOADED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_USER_AUTHENTICATED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_NEW_INSTALL_DONE, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_SUBSCRIPTIONS_LOADED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_SUBSCRIPTIONS_RESOLVED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_BLOCK_LIST_LOADED, false));
            startupStages.add(new StartupStage(STARTUP_STAGE_FILTER_LIST_LOADED, false));
        }

        protected void onPreExecute() {
            hideActionBar();
            // findViewById(R.id.splash_view).setVisibility(View.VISIBLE);
            LbryAnalytics.setCurrentScreen(MainActivity.this, "Splash", "Splash");
            initStartupStages();
        }

        protected Boolean doInBackground(Void... params) {
            BufferedReader reader = null;
            try {
                // Load the installation id from the file system
                String lbrynetDir = String.format("%s/%s", getAppInternalStorageDir(), "lbrynet");
                String installIdPath = String.format("%s/install_id", lbrynetDir);
                reader = new BufferedReader(new InputStreamReader(new FileInputStream(installIdPath)));
                String installId = reader.readLine();
                if (Helper.isNullOrEmpty(installId)) {
                    // no install_id found (first run didn't start the sdk successfully?)
                    startupStages.set(STARTUP_STAGE_INSTALL_ID_LOADED - 1, new StartupStage(STARTUP_STAGE_INSTALL_ID_LOADED, false));
                    return false;
                }
                Lbry.INSTALLATION_ID = installId;
                startupStages.set(STARTUP_STAGE_INSTALL_ID_LOADED - 1, new StartupStage(STARTUP_STAGE_INSTALL_ID_LOADED, true));
                SQLiteDatabase db = dbHelper.getReadableDatabase();
                List<Tag> fetchedTags = DatabaseHelper.getTags(db);
                Lbry.knownTags = Helper.mergeKnownTags(fetchedTags);
                Collections.sort(Lbry.knownTags, new Tag());
                Lbry.followedTags = Helper.filterFollowedTags(Lbry.knownTags);
                startupStages.set(STARTUP_STAGE_KNOWN_TAGS_LOADED - 1, new StartupStage(STARTUP_STAGE_KNOWN_TAGS_LOADED, true));
                // load the exchange rate
                Lbryio.loadExchangeRate();
                if (Lbryio.LBCUSDRate == 0) {
                    return false;
                }
                startupStages.set(STARTUP_STAGE_EXCHANGE_RATE_LOADED - 1, new StartupStage(STARTUP_STAGE_EXCHANGE_RATE_LOADED, true));
                try {
                    Lbryio.authenticate(context);
                } catch (AuthTokenInvalidatedException ex) {
                    // if this happens, attempt to authenticate again, so that we can obtain a new auth token
                    // this will also result in the user having to sign in again
                    Lbryio.authenticate(context);
                }
                if (Lbryio.currentUser == null) {
                    throw new Exception("Did not retrieve authenticated user.");
                }
                startupStages.set(STARTUP_STAGE_USER_AUTHENTICATED - 1, new StartupStage(STARTUP_STAGE_USER_AUTHENTICATED, true));
                Lbryio.newInstall(context);
                startupStages.set(STARTUP_STAGE_NEW_INSTALL_DONE - 1, new StartupStage(STARTUP_STAGE_NEW_INSTALL_DONE, true));
                startupStages.set(STARTUP_STAGE_SUBSCRIPTIONS_LOADED - 1, new StartupStage(STARTUP_STAGE_SUBSCRIPTIONS_LOADED, true));
                startupStages.set(STARTUP_STAGE_SUBSCRIPTIONS_RESOLVED - 1, new StartupStage(STARTUP_STAGE_SUBSCRIPTIONS_RESOLVED, true));
                JSONObject blockedObject = (JSONObject) Lbryio.parseResponse(Lbryio.call("file", "list_blocked", context));
                JSONArray blockedArray = blockedObject.getJSONArray("outpoints");
                Lbryio.populateOutpointList(Lbryio.blockedOutpoints, blockedArray);
                startupStages.set(STARTUP_STAGE_BLOCK_LIST_LOADED - 1, new StartupStage(STARTUP_STAGE_BLOCK_LIST_LOADED, true));
                JSONObject filteredObject = (JSONObject) Lbryio.parseResponse(Lbryio.call("file", "list_filtered", context));
                JSONArray filteredArray = filteredObject.getJSONArray("outpoints");
                Lbryio.populateOutpointList(Lbryio.filteredOutpoints, filteredArray);
                startupStages.set(STARTUP_STAGE_FILTER_LIST_LOADED - 1, new StartupStage(STARTUP_STAGE_FILTER_LIST_LOADED, true));
            } catch (Exception ex) {
                // nope
                Log.e(TAG, String.format("App startup failed: %s", ex.getMessage()), ex);
                return false;
            } finally {
                Helper.closeCloseable(reader);
            }
            return true;
        }

        protected void onPostExecute(Boolean startupSuccessful) {
            if (!startupSuccessful) {
                // show which startup stage failed
                renderStartupFailed(startupStages);
                appStarted = false;
                return;
            }
            // findViewById(R.id.splash_view).setVisibility(View.GONE);
            showActionBar();
            // loadLastFragment();
            fetchRewards();
            loadRemoteNotifications(false);
            checkUrlIntent(getIntent());
            checkWebSocketClient();
            LbryAnalytics.logEvent(LbryAnalytics.EVENT_APP_LAUNCH);
            appStarted = true;
        }
    }).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
Also used : Context(android.content.Context) InputStreamReader(java.io.InputStreamReader) AsyncTask(android.os.AsyncTask) JSONArray(org.json.JSONArray) SpannableString(android.text.SpannableString) FileInputStream(java.io.FileInputStream) JSONException(org.json.JSONException) LbryUriException(com.odysee.app.exceptions.LbryUriException) ExecutionException(java.util.concurrent.ExecutionException) SQLiteException(android.database.sqlite.SQLiteException) LbryioRequestException(com.odysee.app.exceptions.LbryioRequestException) LbryioResponseException(com.odysee.app.exceptions.LbryioResponseException) ApiCallException(com.odysee.app.exceptions.ApiCallException) AuthTokenInvalidatedException(com.odysee.app.exceptions.AuthTokenInvalidatedException) ParseException(java.text.ParseException) StartupStage(com.odysee.app.model.StartupStage) AuthTokenInvalidatedException(com.odysee.app.exceptions.AuthTokenInvalidatedException) JSONObject(org.json.JSONObject) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) BufferedReader(java.io.BufferedReader) ArrayList(java.util.ArrayList) List(java.util.List) Tag(com.odysee.app.model.Tag) SuppressLint(android.annotation.SuppressLint)

Example 2 with StartupStage

use of com.odysee.app.model.StartupStage in project odysee-android by OdyseeTeam.

the class StartupStageAdapter method getView.

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    if (view == null) {
        view = inflater.inflate(R.layout.list_item_startupstage, viewGroup, false);
        ImageView iconView = view.findViewById(R.id.startup_stage_icon);
        TextView textView = view.findViewById(R.id.startup_stage_text);
        StartupStage item = (StartupStage) getItem(i);
        iconView.setImageResource(item.stageDone ? R.drawable.ic_check : R.drawable.ic_close);
        iconView.setColorFilter(item.stageDone ? Color.WHITE : Color.RED);
        textView.setText(stagesString[item.stage - 1]);
    }
    return view;
}
Also used : TextView(android.widget.TextView) ImageView(android.widget.ImageView) StartupStage(com.odysee.app.model.StartupStage)

Aggregations

StartupStage (com.odysee.app.model.StartupStage)2 SuppressLint (android.annotation.SuppressLint)1 Context (android.content.Context)1 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)1 SQLiteException (android.database.sqlite.SQLiteException)1 AsyncTask (android.os.AsyncTask)1 SpannableString (android.text.SpannableString)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 ApiCallException (com.odysee.app.exceptions.ApiCallException)1 AuthTokenInvalidatedException (com.odysee.app.exceptions.AuthTokenInvalidatedException)1 LbryUriException (com.odysee.app.exceptions.LbryUriException)1 LbryioRequestException (com.odysee.app.exceptions.LbryioRequestException)1 LbryioResponseException (com.odysee.app.exceptions.LbryioResponseException)1 Tag (com.odysee.app.model.Tag)1 BufferedReader (java.io.BufferedReader)1 FileInputStream (java.io.FileInputStream)1 InputStreamReader (java.io.InputStreamReader)1 ParseException (java.text.ParseException)1 ArrayList (java.util.ArrayList)1