/* Minetest Copyright (C) 2014-2020 MoNTE48, Maksim Gamarnik Copyright (C) 2014-2020 ubulem, Bektur Mambetov This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.minetest.minetest; import android.Manifest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MainActivity extends AppCompatActivity { private final static int versionCode = BuildConfig.VERSION_CODE; private final static int PERMISSIONS = 1; private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; private static final String SETTINGS = "MinetestSettings"; private static final String TAG_VERSION_CODE = "versionCode"; private ProgressBar mProgressBar; private TextView mTextView; private SharedPreferences sharedPreferences; private final BroadcastReceiver myReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int progress = 0; if (intent != null) progress = intent.getIntExtra(UnzipService.ACTION_PROGRESS, 0); if (progress >= 0) { if (mProgressBar != null) { mProgressBar.setVisibility(View.VISIBLE); mProgressBar.setProgress(progress); } mTextView.setVisibility(View.VISIBLE); } else startNative(); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(UnzipService.ACTION_UPDATE); registerReceiver(myReceiver, filter); mProgressBar = findViewById(R.id.progressBar); mTextView = findViewById(R.id.textView); sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) checkPermission(); else checkAppVersion(); } private void checkPermission() { final List missingPermissions = new ArrayList<>(); for (final String permission : REQUIRED_SDK_PERMISSIONS) { final int result = ContextCompat.checkSelfPermission(this, permission); if (result != PackageManager.PERMISSION_GRANTED) missingPermissions.add(permission); } if (!missingPermissions.isEmpty()) { final String[] permissions = missingPermissions .toArray(new String[0]); ActivityCompat.requestPermissions(this, permissions, PERMISSIONS); } else { final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length]; Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED); onRequestPermissionsResult(PERMISSIONS, REQUIRED_SDK_PERMISSIONS, grantResults); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISSIONS) { for (int grantResult : grantResults) { if (grantResult != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, R.string.not_granted, Toast.LENGTH_LONG).show(); finish(); } } checkAppVersion(); } } private void checkAppVersion() { if (sharedPreferences.getInt(TAG_VERSION_CODE, 0) == versionCode) startNative(); else new CopyZipTask(this).execute(getCacheDir() + "/Minetest.zip"); } private void startNative() { sharedPreferences.edit().putInt(TAG_VERSION_CODE, versionCode).apply(); Intent intent = new Intent(this, GameActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceiver); } }