Skip to content

Commit

Permalink
[refactor] Converts BaseActivity to kotlin.
Browse files Browse the repository at this point in the history
  • Loading branch information
coderPaddyS committed Dec 20, 2024
1 parent 5dd99f3 commit 4803191
Showing 1 changed file with 128 additions and 136 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,143 +15,121 @@
You should have received a copy of the GNU General Public License
along with Privacy Friendly App Example. If not, see <http://www.gnu.org/licenses/>.
*/

package org.secuso.privacyfriendly2048.activities.helper;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.view.MenuItem;
import android.view.View;

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.TaskStackBuilder;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;

import com.google.android.material.navigation.NavigationView;
import com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener;

import org.secuso.privacyfriendly2048.R;
import org.secuso.privacyfriendly2048.activities.MainActivity;
import org.secuso.privacyfriendly2048.activities.StatsActivity;
package org.secuso.privacyfriendly2048.activities.helper

import android.content.Intent
import android.content.SharedPreferences
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.preference.PreferenceActivity
import android.preference.PreferenceManager
import android.view.MenuItem
import android.view.View
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.app.TaskStackBuilder
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
import org.secuso.privacyfriendly2048.R
import org.secuso.privacyfriendly2048.activities.MainActivity
import org.secuso.privacyfriendly2048.activities.StatsActivity

/**
* @author Christopher Beckmann, Karola Marky
* @version 20171017
* This class is a parent class of all activities that can be accessed from the
* Navigation Drawer (example see MainActivity.java)
* <p>
*
*
* The default NavigationDrawer functionality is implemented in this class. If you wish to inherit
* the default behaviour, make sure the content view has a NavigationDrawer with the id 'nav_view',
* the header should point to 'nav_header_main' and the menu should be loaded from 'main_drawer'.
* <p>
*
*
* Also the main layout that holds the content of the activity should have the id 'main_content'.
* This way it will automatically fade in and out every time a transition is happening.
*/
public abstract class BaseActivity extends AppCompatActivity implements OnNavigationItemSelectedListener {

// delay to launch nav drawer item, to allow close animation to play
public static final int NAVDRAWER_LAUNCH_DELAY = 250;
// fade in and fade out durations for the main content when switching between
// different Activities of the app through the Nav Drawer
public static final int MAIN_CONTENT_FADEOUT_DURATION = 150;
public static final int MAIN_CONTENT_FADEIN_DURATION = 250;

abstract class BaseActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {
// Navigation drawer:
public DrawerLayout mDrawerLayout;
private NavigationView mNavigationView;
var mDrawerLayout: DrawerLayout? = null
private var mNavigationView: NavigationView? = null

// Helper
private Handler mHandler;
protected SharedPreferences mSharedPreferences;
private var mHandler: Handler? = null
protected var mSharedPreferences: SharedPreferences? = null

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mHandler = new Handler();
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
mHandler = Handler()

overridePendingTransition(0, 0);
overridePendingTransition(0, 0)
}

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
override fun onBackPressed() {
val drawer = findViewById<View>(R.id.drawer_layout) as DrawerLayout
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
drawer.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed();
super.onBackPressed()
}
}

protected abstract int getNavigationDrawerID();
protected abstract val navigationDrawerID: Int

@Override
public boolean onNavigationItemSelected(MenuItem item) {
final int itemId = item.getItemId();
override fun onNavigationItemSelected(item: MenuItem): Boolean {
val itemId = item.itemId

return goToNavigationItem(itemId);
return goToNavigationItem(itemId)
}


protected boolean goToNavigationItem(final int itemId) {

if (itemId == getNavigationDrawerID()) {
protected fun goToNavigationItem(itemId: Int): Boolean {
if (itemId == navigationDrawerID) {
// just close drawer because we are already in this activity
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
mDrawerLayout!!.closeDrawer(GravityCompat.START)
return true
}

// delay transition so the drawer can close
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
callDrawerItem(itemId);
}
}, NAVDRAWER_LAUNCH_DELAY);
mHandler!!.postDelayed({ callDrawerItem(itemId) }, NAVDRAWER_LAUNCH_DELAY.toLong())

mDrawerLayout.closeDrawer(GravityCompat.START);
mDrawerLayout!!.closeDrawer(GravityCompat.START)

selectNavigationItem(itemId);
selectNavigationItem(itemId)

// fade out the active activity
View mainContent = findViewById(R.id.main_content);
if (mainContent != null) {
mainContent.animate().alpha(0).setDuration(MAIN_CONTENT_FADEOUT_DURATION);
}
return true;
val mainContent = findViewById<View>(R.id.main_content)
mainContent?.animate()?.alpha(0f)?.setDuration(MAIN_CONTENT_FADEOUT_DURATION.toLong())
return true
}

// set active navigation item
private void selectNavigationItem(int itemId) {
for (int i = 0; i < mNavigationView.getMenu().size(); i++) {
boolean b = itemId == mNavigationView.getMenu().getItem(i).getItemId();
mNavigationView.getMenu().getItem(i).setChecked(b);
private fun selectNavigationItem(itemId: Int) {
for (i in 0 until mNavigationView!!.menu.size()) {
val b = itemId == mNavigationView!!.menu.getItem(i).itemId
mNavigationView!!.menu.getItem(i).setChecked(b)
}
}

/**
* Enables back navigation for activities that are launched from the NavBar. See
* {@code AndroidManifest.xml} to find out the parent activity names for each activity.
* `AndroidManifest.xml` to find out the parent activity names for each activity.
*
* @param intent
*/
private void createBackStack(Intent intent) {
private fun createBackStack(intent: Intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
TaskStackBuilder builder = TaskStackBuilder.create(this);
builder.addNextIntentWithParentStack(intent);
builder.startActivities();
val builder = TaskStackBuilder.create(this)
builder.addNextIntentWithParentStack(intent)
builder.startActivities()
} else {
startActivity(intent);
finish();
startActivity(intent)
finish()
}
}

Expand All @@ -161,69 +139,83 @@ public abstract class BaseActivity extends AppCompatActivity implements OnNaviga
*
* @param itemId Item that has been clicked by the user
*/
private void callDrawerItem(final int itemId) {
Intent intent;

switch (itemId) {
case R.id.nav_example:

intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
break;
case R.id.nav_tutorial:
intent = new Intent(this, TutorialActivity.class);
createBackStack(intent);
break;
case R.id.nav_about:
intent = new Intent(this, AboutActivity.class);
createBackStack(intent);
break;
case R.id.nav_help:
intent = new Intent(this, HelpActivity.class);
createBackStack(intent);
break;
case R.id.nav_statistics:
intent = new Intent(this, StatsActivity.class);
createBackStack(intent);
break;
case R.id.nav_settings:
intent = new Intent(this, SettingsActivity.class);
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.GeneralPreferenceFragment.class.getName());
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true);
createBackStack(intent);
break;
default:
private fun callDrawerItem(itemId: Int) {
val intent: Intent

when (itemId) {
R.id.nav_example -> {
intent = Intent(this, MainActivity::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
}

R.id.nav_tutorial -> {
intent = Intent(this, TutorialActivity::class.java)
createBackStack(intent)
}

R.id.nav_about -> {
intent = Intent(this, AboutActivity::class.java)
createBackStack(intent)
}

R.id.nav_help -> {
intent = Intent(this, HelpActivity::class.java)
createBackStack(intent)
}

R.id.nav_statistics -> {
intent = Intent(this, StatsActivity::class.java)
createBackStack(intent)
}

R.id.nav_settings -> {
intent = Intent(this, SettingsActivity::class.java)
intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.GeneralPreferenceFragment::class.java.getName())
intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true)
createBackStack(intent)
}

else -> {}
}
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
override fun onPostCreate(savedInstanceState: Bundle?) {
super.onPostCreate(savedInstanceState)

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
if (getSupportActionBar() == null) {
setSupportActionBar(toolbar);
val toolbar = findViewById<View>(R.id.toolbar) as Toolbar
if (supportActionBar == null) {
setSupportActionBar(toolbar)
}

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
mDrawerLayout.addDrawerListener(toggle);
mDrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
val toggle = ActionBarDrawerToggle(
this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
)
mDrawerLayout!!.addDrawerListener(toggle)

toggle.syncState();
toggle.syncState()

mNavigationView = (NavigationView) findViewById(R.id.nav_view);
mNavigationView.setNavigationItemSelectedListener(this);
mNavigationView = findViewById<View>(R.id.nav_view) as NavigationView
mNavigationView!!.setNavigationItemSelectedListener(this)

selectNavigationItem(getNavigationDrawerID());
selectNavigationItem(navigationDrawerID)

View mainContent = findViewById(R.id.main_content);
val mainContent = findViewById<View>(R.id.main_content)
if (mainContent != null) {
mainContent.setAlpha(0);
mainContent.animate().alpha(1).setDuration(MAIN_CONTENT_FADEIN_DURATION);
mainContent.alpha = 0f
mainContent.animate().alpha(1f).setDuration(MAIN_CONTENT_FADEIN_DURATION.toLong())
}
}


companion object {
// delay to launch nav drawer item, to allow close animation to play
const val NAVDRAWER_LAUNCH_DELAY: Int = 250

// fade in and fade out durations for the main content when switching between
// different Activities of the app through the Nav Drawer
const val MAIN_CONTENT_FADEOUT_DURATION: Int = 150
const val MAIN_CONTENT_FADEIN_DURATION: Int = 250
}
}

0 comments on commit 4803191

Please sign in to comment.