<commit_before>package com.yokmama.learn10.chapter06.lesson29;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Point;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;

import com.yokmama.learn10.chapter06.lesson29.net.RequestDownloadImage;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 定期的に壁紙を変更するクラス
 * Created by kayo on 15/04/08.
 */
public class WallpaperBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = WallpaperBroadcastReceiver.class.getSimpleName();
    private PreferenceDao mPrefs;
    private Handler mHandler;
    private static Thread sThread;

    @Override
    public void onReceive(final Context context, Intent intent) {
        mPrefs = new PreferenceDao(context);
        mHandler = new Handler(context.getMainLooper());

        String action = intent.getAction();
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
            Log.v(TAG, "端末起動完了");

            if (mPrefs.isAutoWallpaperEnabled()) {
                startPolling(context);
            }
        } else {
            Log.v(TAG, "壁紙変更");

            if (sThread == null) {
                sThread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Log.v(TAG, "最適な壁紙を取得");
                            final Bitmap wallpaper = getWallpaper(context);

                            // メインスレッドで実行
                            mHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        WallpaperManager wm = WallpaperManager.getInstance(context);
                                        wm.setBitmap(wallpaper);
                                        Log.v(TAG, "壁紙変更");
                                    } catch (IOException e) {
                                        Log.e(TAG, "壁紙の変更に失敗", e);
                                    }
                                }
                            });
                        } catch (IOException e) {
                            Log.e(TAG, "壁紙の取得に失敗", e);
                        }
                        sThread = null;
                    }
                });
                sThread.start();
            }
        }
    }

    private Bitmap getWallpaper(Context context) throws IOException {
        RequestDownloadImage requestDownloadImage = new RequestDownloadImage(context);
        File imageDir = requestDownloadImage.getImageDir();

        // どの画像を表示するのかを選択
        String filePath = nextWallpaperPath(imageDir);

        // 元画像を取得
//        InputStream inputStream = assets.open(filePath);
        InputStream inputStream = new FileInputStream(filePath);
        Bitmap originalWallpaper = BitmapFactory.decodeStream(inputStream);
        inputStream.close();

        // 画面サイズに合わせて縮小した画像を作成
        Bitmap resizedWallpaper = createResizedWallpaper(context, originalWallpaper);

        // 元画像はもう必要ないので破棄
        originalWallpaper.recycle();

        return resizedWallpaper;
    }

    private String nextWallpaperPath(File imageDir) throws IOException {
//        final String ASSETS_WALLPAPERS_DIR_NAME = "wallpapers";
//
        // 画像一覧を取得
//        String[] wallpapers = assets.list(ASSETS_WALLPAPERS_DIR_NAME);
        String[] wallpapers = imageDir.list();

        // 以前表示していた壁紙の位置を取得
        int oldPosition = mPrefs.getWallpaperPosition();
        final int newPosition;
        if (wallpapers.length > oldPosition + 1) {
            // 配列の範囲内であれば、以前の位置+1を表示する画像とする
            newPosition = oldPosition + 1;
            mPrefs.putWallpaperPosition(newPosition);
        } else {
            // 範囲外であれば0に戻す
            newPosition = 0;<commit_msg>NPE修正<commit_after>package com.yokmama.learn10.chapter06.lesson29;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Point;
import android.os.Handler;
import android.os.SystemClock;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;

import com.yokmama.learn10.chapter06.lesson29.net.RequestDownloadImage;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 定期的に壁紙を変更するクラス
 * Created by kayo on 15/04/08.
 */
public class WallpaperBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = WallpaperBroadcastReceiver.class.getSimpleName();
    private PreferenceDao mPrefs;
    private Handler mHandler;
    private static Thread sThread;

    @Override
    public void onReceive(final Context context, Intent intent) {
        mPrefs = new PreferenceDao(context);
        mHandler = new Handler(context.getMainLooper());

        String action = intent.getAction();
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
            Log.v(TAG, "端末起動完了");

            if (mPrefs.isAutoWallpaperEnabled()) {
                startPolling(context);
            }
        } else {
            Log.v(TAG, "壁紙変更");

            if (sThread == null) {
                sThread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Log.v(TAG, "最適な壁紙を取得");
                            final Bitmap wallpaper = getWallpaper(context);

                            // メインスレッドで実行
                            mHandler.post(new Runnable() {
                                @Override
                                public void run() {
                                    try {
                                        WallpaperManager wm = WallpaperManager.getInstance(context);
                                        wm.setBitmap(wallpaper);
                                        Log.v(TAG, "壁紙変更");
                                    } catch (IOException e) {
                                        Log.e(TAG, "壁紙の変更に失敗", e);
                                    }
                                }
                            });
                        } catch (IOException e) {
                            Log.e(TAG, "壁紙の取得に失敗", e);
                        }
                        sThread = null;
                    }
                });
                sThread.start();
            }
        }
    }

    private Bitmap getWallpaper(Context context) throws IOException {
        RequestDownloadImage requestDownloadImage = new RequestDownloadImage(context);
        File imageDir = requestDownloadImage.getImageDir();

        // どの画像を表示するのかを選択
        String filePath = nextWallpaperPath(imageDir);

        // 元画像を取得
//        InputStream inputStream = assets.open(filePath);
        InputStream inputStream = new FileInputStream(filePath);
        Bitmap originalWallpaper = BitmapFactory.decodeStream(inputStream);
        inputStream.close();

        // 画面サイズに合わせて縮小した画像を作成
        Bitmap resizedWallpaper = createResizedWallpaper(context, originalWallpaper);

        // 元画像はもう必要ないので破棄
        originalWallpaper.recycle();

        return resizedWallpaper;
    }

    private String nextWallpaperPath(File imageDir) throws IOException {
//        final String ASSETS_WALLPAPERS_DIR_NAME = "wallpapers";
//
        // 画像一覧を取得
//        String[] wallpapers = assets.list(ASSETS_WALLPAPERS_DIR_NAME);
        String[] wallpapers = imageDir.list();
        if (wallpapers == null || wallpapers.length == 0) {
            // 壁紙が見つからなかった。
            return null;
        }

        // 以前表示していた壁紙の位置を取得
        int oldPosition = mPrefs.getWallpaperPosition();
        final int newPosition;
        if (wallpapers.length > oldPosition + 1) {
            // 配列の範囲内であれば、以前の位置+1を表示する画像とする
            newPosition = oldPosition + 1;
            mPrefs.putWallpaperPosition(newPosition);
        } else {
            // 範囲外であれば0に戻す
            newPosition = 0;
{'fraction_non_alphanumeric': 0.08473798876275657, 'fraction_numerical': 0.005389290219011581, 'mean_word_length': 1.7171339563862928, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 24, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6208376', 'n_tokens_mistral': 2558, 'n_tokens_neox': 2426, 'n_words': 447}