1 package org.coolreader.crengine; 2 3 import android.content.Context; 4 import android.util.Log; 5 import android.view.View; 6 7 import java.util.List; 8 9 public class EinkScreenNook implements EinkScreen { 10 11 public static final Logger log = L.create("nook", Log.VERBOSE); 12 13 /// variables 14 protected EinkUpdateMode mUpdateMode = EinkUpdateMode.Unspecified; 15 // 0 - Clear, set only for old_mode == 2 16 // 1 - Fast, always set in prepare 17 // 2 - Active, set in prepare 18 protected int mUpdateInterval; 19 protected int mRefreshNumber = -1; 20 protected boolean mIsSleep = false; 21 22 @Override setupController(EinkUpdateMode mode, int updateInterval, View view)23 public void setupController(EinkUpdateMode mode, int updateInterval, View view) { 24 mUpdateInterval = updateInterval; 25 if (mUpdateMode.equals(mode)) 26 return; 27 log.d("EinkScreenNookTolino.setupController(): mode=" + mode); 28 switch (mode) { 29 case Clear: 30 if (mUpdateMode == EinkUpdateMode.Active) { 31 mRefreshNumber = -1; 32 } else { 33 mRefreshNumber = 0; 34 } 35 break; 36 case Fast: 37 mRefreshNumber = 0; 38 break; 39 default: 40 mRefreshNumber = -1; 41 } 42 mUpdateMode = mode; 43 } 44 45 @Override prepareController(View view, boolean isPartially)46 public void prepareController(View view, boolean isPartially) { 47 //System.err.println("Sleep = " + isPartially); 48 if (isPartially || mIsSleep != isPartially) { 49 nookSleepController(isPartially, view); 50 // if (isPartially) 51 return; 52 } 53 if (mRefreshNumber == -1) { 54 switch (mUpdateMode) { 55 case Clear: 56 nookSetMode(view, mUpdateMode); 57 break; 58 case Active: 59 if (mUpdateInterval == 0) { 60 nookSetMode(view, mUpdateMode); 61 } 62 break; 63 } 64 mRefreshNumber = 0; 65 return; 66 } 67 if (mUpdateMode == EinkUpdateMode.Clear) { 68 nookSetMode(view, mUpdateMode); 69 return; 70 } 71 if (mUpdateInterval > 0 || mUpdateMode == EinkUpdateMode.Fast) { 72 if (mRefreshNumber == 0 || (mUpdateMode == EinkUpdateMode.Fast && mRefreshNumber < mUpdateInterval)) { 73 switch (mUpdateMode) { 74 case Active: 75 nookSetMode(view, mUpdateMode); 76 break; 77 case Fast: 78 nookSetMode(view, mUpdateMode); 79 break; 80 } 81 } else if (mUpdateInterval <= mRefreshNumber) { 82 nookSetMode(view, EinkUpdateMode.Clear); 83 mRefreshNumber = -1; 84 } 85 if (mUpdateInterval > 0) { 86 mRefreshNumber++; 87 } 88 } 89 } 90 91 @Override updateController(View view, boolean isPartially)92 public void updateController(View view, boolean isPartially) { 93 // do nothing... 94 } 95 96 @Override refreshScreen(View view)97 public void refreshScreen(View view) { 98 mRefreshNumber = -1; 99 } 100 101 @Override getUpdateMode()102 public EinkUpdateMode getUpdateMode() { 103 return mUpdateMode; 104 } 105 106 @Override getUpdateInterval()107 public int getUpdateInterval() { 108 return mUpdateInterval; 109 } 110 111 @Override getFrontLightValue(Context context)112 public int getFrontLightValue(Context context) { 113 return 0; 114 } 115 116 @Override setFrontLightValue(Context context, int value)117 public boolean setFrontLightValue(Context context, int value) { 118 return false; 119 } 120 121 @Override getWarmLightValue(Context context)122 public int getWarmLightValue(Context context) { 123 return 0; 124 } 125 126 @Override setWarmLightValue(Context context, int value)127 public boolean setWarmLightValue(Context context, int value) { 128 return false; 129 } 130 131 @Override getFrontLightLevels(Context context)132 public List<Integer> getFrontLightLevels(Context context) { 133 return null; 134 } 135 136 @Override getWarmLightLevels(Context context)137 public List<Integer> getWarmLightLevels(Context context) { 138 return null; 139 } 140 141 142 // private methods nookSleepController(boolean toSleep, View view)143 private void nookSleepController(boolean toSleep, View view) { 144 if (toSleep != mIsSleep) { 145 log.d("+++SleepController " + toSleep); 146 mIsSleep = toSleep; 147 if (mIsSleep) { 148 switch (mUpdateMode) { 149 case Clear: 150 break; 151 case Fast: 152 break; 153 case Active: 154 nookSetMode(view, EinkUpdateMode.Clear); 155 mRefreshNumber = -1; 156 } 157 } else { 158 setupController(mUpdateMode, mUpdateInterval, view); 159 } 160 } 161 } 162 nookSetMode(View view, EinkUpdateMode mode)163 private void nookSetMode(View view, EinkUpdateMode mode) { 164 switch (mode) { 165 case Clear: 166 N2EpdController.setMode(N2EpdController.REGION_APP_3, 167 N2EpdController.WAVE_GC, 168 N2EpdController.MODE_ONESHOT_ALL); 169 // N2EpdController.MODE_CLEAR, view); 170 break; 171 case Fast: 172 N2EpdController.setMode(N2EpdController.REGION_APP_3, 173 N2EpdController.WAVE_GU, 174 N2EpdController.MODE_ONESHOT_ALL); 175 // N2EpdController.MODE_ONESHOT_ALL, view); 176 break; 177 case Active: 178 N2EpdController.setMode(N2EpdController.REGION_APP_3, 179 N2EpdController.WAVE_GL16, 180 N2EpdController.MODE_ACTIVE_ALL); 181 // N2EpdController.MODE_ACTIVE_ALL, view); 182 break; 183 } 184 } 185 } 186