Skip to content

Commit

Permalink
Fix memory leaks (#603)
Browse files Browse the repository at this point in the history
* Add canaryleak to detect memory leaks

unregister local broadcast receiver in GsrReservationsFragment when fragment is destroyed to prevent memory leak. TODO: remove LocalBroadcastManager entirely because that shit deprecated.

remove LocalBroadCastManager from HomeFragment since it is unused (and was causing memory leaks)

* Fix more memory leaks lol

* remove unused import
  • Loading branch information
meiron03 committed Feb 13, 2024
1 parent 6b96956 commit a0533c4
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 22 deletions.
2 changes: 2 additions & 0 deletions PennMobile/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ android {
}

dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:3.0-alpha-1'

implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation(platform("com.google.firebase:firebase-bom:31.5.0"))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,5 +130,8 @@ class GsrReservationsFragment : Fragment() {
getReservations()
}
}

override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(mActivity).unregisterReceiver(broadcastReceiver);
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
package com.pennapps.labs.pennmobile

import android.content.*
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -17,7 +12,6 @@ import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.pennapps.labs.pennmobile.adapters.HomeAdapter
Expand Down Expand Up @@ -48,10 +42,6 @@ class HomeFragment : Fragment() {

mActivity = activity as MainActivity
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mActivity)

LocalBroadcastManager
.getInstance(mActivity)
.registerReceiver(broadcastReceiver, IntentFilter("refresh"))
}

override fun onCreateView(
Expand Down Expand Up @@ -186,13 +176,6 @@ class HomeFragment : Fragment() {
}
}


private val broadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
getHomePage()
}
}

override fun onResume() {
super.onResume()
mActivity.removeTabs()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ fun isOnline(context: Context?): Boolean {
return false
}


/** Shows an error sneaker given a view group with an optional retry function */
fun ViewGroup.showSneakerToast(message: String, doOnRetry: (() -> Unit)?, sneakerColor: Int) {
val sneaker = Sneaker.with(this)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import android.widget.ImageView
import android.widget.ListView
import android.widget.TextView
import androidx.preference.PreferenceManager
import com.google.firebase.analytics.FirebaseAnalytics
import com.pennapps.labs.pennmobile.databinding.FragmentNewsBinding
import java.util.ArrayList

Expand All @@ -41,6 +40,8 @@ class NewsFragment : ListFragment() {
private var isCustomTabsSupported: Boolean = false
private lateinit var sharedPreferences: SharedPreferences

private var connection: NewsCustomTabsServiceConnection? = null

private var _binding : FragmentNewsBinding? = null
private val binding get() = _binding!!

Expand Down Expand Up @@ -112,7 +113,7 @@ class NewsFragment : ListFragment() {

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val connection = NewsCustomTabsServiceConnection()
connection = NewsCustomTabsServiceConnection()
context?.let { context ->
isCustomTabsSupported = isChromeCustomTabsSupported(context)
}
Expand All @@ -127,7 +128,7 @@ class NewsFragment : ListFragment() {
androidx.appcompat.R.anim.abc_popup_enter,
androidx.appcompat.R.anim.abc_popup_exit)
CustomTabsClient.bindCustomTabsService(context,
CUSTOM_TAB_PACKAGE_NAME, connection)
CUSTOM_TAB_PACKAGE_NAME, connection!!)
}

addNews()
Expand Down Expand Up @@ -228,5 +229,9 @@ class NewsFragment : ListFragment() {
mActivity.removeTabs()
super.onDestroyView()
_binding = null
connection?.let {
context?.unbindService(connection!!)
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,9 @@ class SupportFragment : ListFragment() {
mActivity.hideBottomBar()
mActivity.setSelectedTab(MainActivity.MORE)
}

override fun onDestroyView() {
mActivity.toolbar.setNavigationOnClickListener(null)
super.onDestroyView()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import com.pennapps.labs.pennmobile.classes.GSRBookingResult;
import com.pennapps.labs.pennmobile.classes.GSRLocation;
import com.pennapps.labs.pennmobile.classes.GSRReservation;
import com.pennapps.labs.pennmobile.classes.Gym;
import com.pennapps.labs.pennmobile.classes.LaundryRequest;
import com.pennapps.labs.pennmobile.classes.LaundryRoom;
import com.pennapps.labs.pennmobile.classes.LaundryRoomSimple;
Expand Down

0 comments on commit a0533c4

Please sign in to comment.