Android Open Source - ion Context Reference






From Project

Back to project page ion.

License

The source code is released under:

Apache License

If you think the Android project ion listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.koushikdutta.ion;
/*from   w w w  .j a  v  a2s  .  c o m*/
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Fragment;
import android.app.Service;
import android.content.Context;
import android.os.Build;
import android.widget.ImageView;

import java.lang.ref.WeakReference;
import java.util.List;

/**
 * Created by koush on 4/15/14.
 */
abstract class ContextReference<T> extends WeakReference<T> {
    ContextReference(T t) {
        super(t);
    }

    abstract static class NormalContextReference<T extends Context> extends ContextReference<T> {
        NormalContextReference(T context) {
            super(context);
        }

        static String isAlive(Context context) {
            if (context instanceof Service)
                return ServiceContextReference.isAlive((Service) context);
            if (context instanceof Activity)
                return ActivityContextReference.isAlive((Activity) context);
            return null;
        }

        @Override
        public Context getContext() {
            return get();
        }
    }

    static class ServiceContextReference extends NormalContextReference<Service> {
        public ServiceContextReference(Service service) {
            super(service);
        }

        static String isAlive(Service candidate) {
            if (candidate == null)
                return "Service reference null";
            ActivityManager manager = (ActivityManager)candidate.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningServiceInfo> services = manager.getRunningServices(Integer.MAX_VALUE);
            if (services == null)
                return "Could not retrieve services from service manager";
            for (ActivityManager.RunningServiceInfo service: services) {
                if (candidate.getClass().getName().equals(service.service.getClassName())) {
                    return null;
                }
            }
            return "Service stopped";
        }

        @Override
        public String isAlive() {
            return isAlive(get());
        }
    }

    static class ActivityContextReference extends NormalContextReference<Activity> {
        public ActivityContextReference(Activity activity) {
            super(activity);
        }

        static String isAlive(Activity a) {
            if (a == null)
                return "Activity reference null";
            if (a.isFinishing())
                return "Activity finished";
            return null;
        }

        @Override
        public String isAlive() {
            return isAlive(get());
        }
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
    static class FragmentContextReference extends ContextReference<Fragment> {
        public FragmentContextReference(Fragment fragment) {
            super(fragment);
        }

        @Override
        public Context getContext() {
            Fragment fragment = get();
            if (fragment == null)
                return null;
            return fragment.getActivity();
        }

        @Override
        public String isAlive() {
            Fragment fragment = get();
            if (fragment == null)
                return "Fragment reference null";
            String ret = ActivityContextReference.isAlive(fragment.getActivity());
            if (ret != null)
                return ret;
            if (fragment.isDetached())
                return "Fragment detached";
            return null;
        }
    }

    static class SupportFragmentContextReference extends ContextReference<android.support.v4.app.Fragment> {
        public SupportFragmentContextReference(android.support.v4.app.Fragment fragment) {
            super(fragment);
        }

        @Override
        public Context getContext() {
            android.support.v4.app.Fragment fragment = get();
            if (fragment == null)
                return null;
            return fragment.getActivity();
        }

        @Override
        public String isAlive() {
            android.support.v4.app.Fragment fragment = get();
            if (fragment == null)
                return "Fragment reference null";
            String ret = ActivityContextReference.isAlive(fragment.getActivity());
            if (ret != null)
                return ret;
            if (fragment.isDetached())
                return "Fragment detached";
            return null;
        }
    }

    static class ImageViewContextReference extends ContextReference<ImageView> {
        public ImageViewContextReference(ImageView imageView) {
            super(imageView);
        }

        @Override
        public String isAlive() {
            ImageView iv = get();
            if (iv == null)
                return "ImageView reference null";
            return NormalContextReference.isAlive(iv.getContext());
        }

        @Override
        public Context getContext() {
            ImageView iv = get();
            if (iv == null)
                return null;
            return iv.getContext();
        }
    }

    public static ContextReference fromContext(Context context) {
        if (context instanceof Service)
            return new ServiceContextReference((Service)context);
        if (context instanceof Activity)
            return new ActivityContextReference((Activity)context);

        return new NormalContextReference<Context>(context) {
            @Override
            public String isAlive() {
                Context context = get();
                if (context == null)
                    return "Context reference null";
                return null;
            }
        };
    }

    public abstract String isAlive();
    public abstract Context getContext();
}




Java Source Code List

com.koushikdutta.ion.BitmapCallback.java
com.koushikdutta.ion.BitmapFetcher.java
com.koushikdutta.ion.BitmapInfoToBitmap.java
com.koushikdutta.ion.ContextReference.java
com.koushikdutta.ion.DefaultTransform.java
com.koushikdutta.ion.DeferredLoadBitmap.java
com.koushikdutta.ion.FileCacheStore.java
com.koushikdutta.ion.HeadersCallback.java
com.koushikdutta.ion.HeadersResponse.java
com.koushikdutta.ion.ImageViewBitmapInfo.java
com.koushikdutta.ion.ImageViewFutureImpl.java
com.koushikdutta.ion.InputStreamParser.java
com.koushikdutta.ion.IonBitmapRequestBuilder.java
com.koushikdutta.ion.IonDrawable.java
com.koushikdutta.ion.IonImageViewRequestBuilder.java
com.koushikdutta.ion.IonLog.java
com.koushikdutta.ion.IonRequestBuilder.java
com.koushikdutta.ion.Ion.java
com.koushikdutta.ion.LoadBitmapBase.java
com.koushikdutta.ion.LoadBitmapEmitter.java
com.koushikdutta.ion.LoadBitmapRegion.java
com.koushikdutta.ion.LoadBitmap.java
com.koushikdutta.ion.LoadDeepZoom.java
com.koushikdutta.ion.Loader.java
com.koushikdutta.ion.ProgressCallback.java
com.koushikdutta.ion.RequestBodyUploadObserver.java
com.koushikdutta.ion.Response.java
com.koushikdutta.ion.ScaleMode.java
com.koushikdutta.ion.TransformBitmap.java
com.koushikdutta.ion.bitmap.BitmapDecodeException.java
com.koushikdutta.ion.bitmap.BitmapInfo.java
com.koushikdutta.ion.bitmap.Exif.java
com.koushikdutta.ion.bitmap.IonBitmapCache.java
com.koushikdutta.ion.bitmap.LocallyCachedStatus.java
com.koushikdutta.ion.bitmap.LruBitmapCache.java
com.koushikdutta.ion.bitmap.MarkableInputStream.java
com.koushikdutta.ion.bitmap.PostProcess.java
com.koushikdutta.ion.bitmap.SoftReferenceHashtable.java
com.koushikdutta.ion.bitmap.Transform.java
com.koushikdutta.ion.builder.AnimateGifMode.java
com.koushikdutta.ion.builder.BitmapBuilder.java
com.koushikdutta.ion.builder.BitmapFutureBuilder.java
com.koushikdutta.ion.builder.Builders.java
com.koushikdutta.ion.builder.FutureBuilder.java
com.koushikdutta.ion.builder.GsonFutureBuilder.java
com.koushikdutta.ion.builder.ImageViewBuilder.java
com.koushikdutta.ion.builder.ImageViewFutureBuilder.java
com.koushikdutta.ion.builder.LoadBuilder.java
com.koushikdutta.ion.builder.LoadImageViewFutureBuilder.java
com.koushikdutta.ion.builder.MultipartBodyBuilder.java
com.koushikdutta.ion.builder.RequestBuilder.java
com.koushikdutta.ion.builder.UrlEncodedBuilder.java
com.koushikdutta.ion.conscrypt.ConscryptMiddleware.java
com.koushikdutta.ion.cookie.CookieMiddleware.java
com.koushikdutta.ion.future.ImageViewFuture.java
com.koushikdutta.ion.future.ResponseFuture.java
com.koushikdutta.ion.gif.GifDecoder.java
com.koushikdutta.ion.gif.GifFrame.java
com.koushikdutta.ion.gson.GsonArrayParser.java
com.koushikdutta.ion.gson.GsonBody.java
com.koushikdutta.ion.gson.GsonObjectParser.java
com.koushikdutta.ion.gson.GsonParser.java
com.koushikdutta.ion.gson.GsonSerializer.java
com.koushikdutta.ion.gson.PojoBody.java
com.koushikdutta.ion.loader.AssetLoader.java
com.koushikdutta.ion.loader.AsyncHttpRequestFactory.java
com.koushikdutta.ion.loader.ContentLoader.java
com.koushikdutta.ion.loader.FileLoader.java
com.koushikdutta.ion.loader.HttpLoader.java
com.koushikdutta.ion.loader.InputStreamDataEmitterFuture.java
com.koushikdutta.ion.loader.MediaFile.java
com.koushikdutta.ion.loader.MtpConstants.java
com.koushikdutta.ion.loader.PackageIconLoader.java
com.koushikdutta.ion.loader.ResourceLoader.java
com.koushikdutta.ion.loader.SimpleLoader.java
com.koushikdutta.ion.loader.StreamLoader.java
com.koushikdutta.ion.loader.VideoLoader.java
com.koushikdutta.ion.sample.DeepZoomSample.java
com.koushikdutta.ion.sample.GallerySample.java
com.koushikdutta.ion.sample.GoogleImageSearch.java
com.koushikdutta.ion.sample.ImageViewSample.java
com.koushikdutta.ion.sample.LollipopTransitionFullscreen.java
com.koushikdutta.ion.sample.LollipopTransition.java
com.koushikdutta.ion.sample.ProgressBarDownload.java
com.koushikdutta.ion.sample.ProgressBarUpload.java
com.koushikdutta.ion.sample.SampleApplication.java
com.koushikdutta.ion.sample.Samples.java
com.koushikdutta.ion.sample.SquaredImageView.java
com.koushikdutta.ion.sample.TwitterGson.java
com.koushikdutta.ion.sample.Twitter.java